package com.feng.eduservice.service;

import com.feng.commonutils.R;
import com.feng.commonutils.vo.CourseVo;
import com.feng.eduservice.dto.CourseInfoDto;
import com.feng.eduservice.dto.CourseQuery;
import com.feng.eduservice.entity.EduCourse;
import com.baomidou.mybatisplus.extension.service.IService;
import com.feng.eduservice.frontvo.CourseFrontVo;
import com.feng.eduservice.frontvo.CourseWebVo;

import javax.servlet.http.HttpServletRequest;

/**
 * <p>
 * 课程 服务类
 * </p>
 *
 * @author fengge
 * @since 2023-01-17
 */
public interface EduCourseService extends IService<EduCourse> {

    /**
     * 添加课程信息
     * @param courseInfoDto
     * @return
     */
    R addCourseInfo(CourseInfoDto courseInfoDto);

    /**
     * //根据课程id查询课程基本信息
     * @param courseId
     * @return
     */
    R getCourseInfo(String courseId);

    /**
     * 修改课程信息
     * @param courseInfoDto
     * @return
     */
    R updateCourseInfo(CourseInfoDto courseInfoDto);

    /**
     * 根据课程id获得课程确认的详情信息
     * @param id
     * @return
     */
    R getPublishCourseInfo(String id);

    /**
     * 课程最终发布，修改status字段信息
     * @param id
     * @return
     */
    R publishCourse(String id);

    /**
     * 分页查询课程列表信息
     * @param current
     * @param limit
     * @param courseQuery
     * @return
     */
    R getCourseList(long current, long limit, CourseQuery courseQuery);

    /**
     * 删除课程，需要关联多张表
     * @param courseId
     * @return
     */
    R deleteCourse(String courseId);

    /**
     * 前台分页查询带条件
     * @param page
     * @param limit
     * @param courseFrontVo
     * @return
     */
    R getFrontCourseList(long page, long limit, CourseFrontVo courseFrontVo);

    /**
     * 前台查询课程详情页面(涉及多张表）
     * @param courseId
     * @return
     */
    R getFrontCourseInfo(String courseId,HttpServletRequest request);

    /**
     * 前台查询课程详情信息（需判断用户是否已经购买过，同时浏览时需要让浏览数+1)
     * @param courseId
     * @return
     */
    CourseWebVo getBaseCourseInfo(String courseId);

   //前台，用于订单信息vo添加 根据课程id查询对应信息
    CourseVo getCourseInfos(String courseId);

    /**
     * 使购买数量加1
     * @param courseId
     * @return
     */
    R updateCourseCount(String courseId);
}
